gradient descent on linear regression from scratch